from instructions.instruction import Instruction
from instructions.enum_types import InstructionType, ActionType
from tools import action_logger
from wechat.reply import ReplyType, Reply
from config import config

HELP_DOCS = {
    InstructionType.HELP: """
    我是金桔园的好帮手, 可以帮助大家记录和汇总金桔的订单,给出报表, 大家就不再需要盯着表格看啦。[机智] 
    我的使用方法：请在群里@我，或者呼叫我为 金桔王，如： @咕噜咕噜咕噜蛋, @金桔王 金桔王, 都可以噢[旺柴]。 
    然后跟上任意如下指令: 
        - 【帮助/指令/使用方法】： 我会告诉你如何使用我，就像现在这样。
        - 【注册】： 由于以下指令都需要已经注册的用户，所以这是第一步。请把你的【地址】【电话】【名字】告诉我，我就会帮你注册[呲牙]。
        - 【导入/导入文件】: 并引用你在群里当日发的文件，我就会帮助你把文件导入数据库中，然后到时间一并给出顺丰模板~[愉快] 
        - 【模板/模板文件】：获取导入使用的格式的文档, 可以说订单模板 或者 金桔模板
        - 【加一单/加单】: 临时加一单，只能一单噢，大致按照这样的格式告诉我就行【收货人 王尼玛, 地址 北京钓鱼台666号房间， 电话 13412344321, 脆蜜1号5斤装 1箱 9折 普通装】
        - 【今日统计/装果】/汇总今天: 我会报告今天需要准备多少金桔,多少包装, 还会把顺丰快递公司需要的格式发出来。【注意，如果超过了下午2点，就不再能改动订单了噢~】
        - 【看报告/汇总我/汇总所有】: 我会为你汇总近半年所有的成绩[呲牙],为了保护大家的隐私，这个功能只能私聊我才提供[害羞]。
        - 【查我今日/查我今天订单/查今天订单】: 我会简介地告诉你今天的订单情况~
        例如：@咕噜咕噜咕噜蛋, 帮我注册为用户，名字：李尼玛，地址：广东省东莞市天上人间666号房间， 电话：13544442222
    如果找我闲聊也可以[叹气], 但可能我的回答不足以让你满意, 也许今后我会变得聪明一些吧。毕竟我爹太穷了[裂开], 本地模型差点, 问别的AI嘛，要钱。
    """,
    InstructionType.IMPORT_EXCEL_ORDER: f""" 如果你想要导入文件，需要经过几个步骤，请耐心一点噢~
🌟首先需要先上传Excel表格，如果表格的格式正确我就会保存下来并告诉你，否则我会忽略这个文件噢~
🌟当你收到我的文件保存下来的反馈后，你需要引用那份要导入的文件，并@我，或者叫我金桔王，导入文件即可
🌟【注意】订单导入之前建议仔细检查噢，不然错误被我发现了...嘿嘿...噢，还有！订单的导入功能只能在【每天的{config.PACKAGE_DEADLINE_TIME.strftime('%H:%S')}之前】使用，过了时间我就不处理了。如果想要调整时间，请呼叫我爹@慌雨~ 
🌟【注意】金桔的导入也要仔细检查噢，而且金桔订单是你的私密信息，一定要【私聊】发给我，不然一律无视[吃瓜]~
""",
    InstructionType.REGISTRY_USER: """ 关于注册的指令是这样的：你可以@我, 或者说金桔王，我要注册，名字：王尼玛， 地址：广西省柳州市融安县鑫茂园，电话是13522226666，
🌟【用处】这些信息是用来生成【快递订单模板】，你就是发货人。不要遗漏信息噢[旺柴]，如果被我检查到错误了..嘿嘿。 
🌟【检查】对了，如果你已经注册过成为用户，可以@我，说注册，我就会返回你的信息。
🌟【修改信息】如果你的注册信息填写错误或者需要修改，就告诉我，【删掉我的信息】，再按照正确的方式从头来过，如果还不明白就找我爹@慌雨吧[呲牙]
🌟【其他说明】很多指令是需要注册成为用户才能使用的哟~
🌟【修改微信昵称】希望你不要在卖金桔的时间段里修改昵称[囧]，因为..一些难以说明的原因，我只能用昵称识别大家，如果改了昵称，我就不认识你啦~你在我这里留下的数据也不再可用，千万小心噢~
""",

}


class HelpInstruction(Instruction):
    def __init__(self, chatDBHandler=None, **kwargs):
        super().__init__(chatDBHandler=chatDBHandler)
        self.prompt = """
        我是金桔园的好帮手, 可以帮助大家记录和汇总金桔的订单,给出报表, 大家就不再需要盯着表格看啦。[机智] 
        我的使用方法：请在群里@我，或者呼叫我为 金桔王，如： @咕噜咕噜咕噜蛋, @金桔王 金桔王, 都可以噢[旺柴]。 
        然后跟上任意如下指令: 
            - 【帮助/指令/使用方法】： 我会告诉你如何使用我，就像现在这样。
            - 【注册】： 由于以下指令都需要已经注册的用户，所以这是第一步。请把你的【地址】【电话】【名字】告诉我，我就会帮你注册[呲牙]。
            - 【导入/导入文件】: 并引用你在群里当日发的文件，我就会帮助你把文件导入数据库中，然后到时间一并给出顺丰模板~[愉快] 
            - 【模板/模板文件】：获取导入使用的格式的文档, 可以说订单模板 或者 金桔模板
            - 【加一单/加单】: 临时加一单，只能一单噢，大致按照这样的格式告诉我就行【收货人 王尼玛, 地址 北京钓鱼台666号房间， 电话 13412344321, 脆蜜1号5斤装 1箱 9折 普通装】
            - 【今日统计/装果】/汇总今天: 我会报告今天需要准备多少金桔,多少包装, 还会把顺丰快递公司需要的格式发出来。【注意，如果超过了下午2点，就不再能改动订单了噢~】
            - 【看报告/汇总我/汇总所有】: 我会为你汇总近半年所有的成绩[呲牙],为了保护大家的隐私，这个功能只能私聊我才提供[害羞]。
            - 【查我今日/查我今天订单/查今天订单】: 我会简介地告诉你今天的订单情况~
            例如：@咕噜咕噜咕噜蛋, 帮我注册为用户，名字：李尼玛，地址：广东省东莞市天上人间666号房间， 电话：13544442222
        如果找我闲聊也可以[叹气], 但可能我的回答不足以让你满意, 也许今后我会变得聪明一些吧。毕竟我爹太穷了[裂开], 本地模型差点, 问别的AI嘛，要钱。
        """
        self.insType = InstructionType.HELP
        self.helpKeyword = kwargs['keywords']

    @action_logger(ActionType.HANDLER_QUERY)
    async def handle_query(self):
        return self.get_help(self.helpKeyword)

    @staticmethod
    def get_help(keywords: InstructionType = None) -> Reply:
        if not keywords or HELP_DOCS.get(keywords) is None:
            return Reply(ReplyType.TEXT, HELP_DOCS.get(InstructionType.HELP))
        elif HELP_DOCS.get(keywords):
            return Reply(ReplyType.TEXT, HELP_DOCS.get(keywords))
        else:
            return Reply(ReplyType.TEXT, "我爹还没写相关文档呢~所以我也不知道怎么帮你，不然你催催？")
